#lang scheme


(define (z1 a x y)    
  (define dx  (if ( > (- (abs x) a) 0) (- (abs x) a) 0))
  (define dy (if ( > (- (abs y) a) 0) (- (abs y) a) 0))
  (define result
    (if (>= y 0)
        (- (sqrt (+ (* x x) (* y y))) a) 
        (sqrt (+ (* dx dx ) (* dy dy))))
    )
    (if (> result 0)
        result
        0
    )
)

(define (z2 h m)
  ; Находим разницу между часовой стрелкой и минутной (в градусах)
  (define out (abs (-
  ;  Переводим минуты в часы, прибавляем заданные часы (h) и умножаем на 30
  ;  т.к. часы делят на 30-градусные сектора                    
     (* 30 (+ h (/ m 60)))
  ;  Переводим минуты в градусную меру, т.к. минуты делят на 6-градусные сектора
     (* 6 m))))
  ; Возможен случай, когда градусная мера out > 180 градусов,
  ; тогда возвращаем разницу между 360 и out
     (if (> out 180) (- 360 out) out)
)

(define (z3 n)
  ; Находим десятки 98 -> 9
  (define d (floor (/ n 10)))
  ; Находим единицы 98 -> 8
  (define e (remainder n 10))
  (cond
    ( (<= n 10)
      (cond
        ( (= n 1)  (display "один") )
        ( (= n 2)  (display "два") )
        ( (= n 3)  (display "три") )
        ( (= n 4)  (display "четыре") )
        ( (= n 5)  (display "пять") )
        ( (= n 6)  (display "шесть") )
        ( (= n 7)  (display "семь") )
        ( (= n 8)  (display "восемь") )
        ( (= n 9)  (display "девять") )
        ( (= n 10) (display "десять"))
        ) )
    ( (and (> n 10) (< n 20))
      (cond
        ( (= n 11) (display "одиннадцать" ))
        ( (= n 12) (display "двенадцать" ))
        ( (= n 13) (display "тринадцать" ))
        ( (= n 14) (display "четырнадцать" ))
        ( (= n 15) (display "пятнадцать" ))
        ( (= n 16) (display "шестнадцать" ))
        ( (= n 17) (display "семнадцать" ))
        ( (= n 18) (display "восемнадцать" ))
        ( (= n 19) (display "девятнадцать" ))
        ) )
    ( ( >= n 20)
      (cond
        ( (= d 2) (display "двадцать ") )
        ( (= d 3) (display "тридцать ") )
        ( (= d 4) (display "сорок ") )
        ( (= d 5) (display "пятьдесят ") )
        ( (= d 6) (display "шесть ") )
        ( (= d 7) (display "семьдесят ") )
        ( (= d 8) (display "восемьдесят ") )
        ( (= d 9) (display "девяносто ") )
        ( (= n 100) (display "сто"))
        )
      (cond
        ( (= e 1) (display "один") )
        ( (= e 2) (display "два") )
        ( (= e 3) (display "три") )
        ( (= e 4) (display "четыре") )
        ( (= e 5) (display "пять") )
        ( (= e 6) (display "шесть") )
        ( (= e 7) (display "семь") )
        ( (= e 8) (display "восемь") )
        ( (= e 9) (display "девять") )
        )
      )
    )
  )

(define (z4 sx sy px py)
 ; Сравниваем цвета клеток, если одно четное, другое нет - #f
  (if (=
       (remainder (+ (remainder sx 2) (remainder sy 2)) 2) ; 0 - черный цвет.1 - белый
       (remainder (+ (remainder px 2) (remainder py 2)) 2) ; проверяем стоят ли они на одних цветах 
       )
    ; Если разницы координат равны, то срубит за один ход, иначе за два
      (if (= (abs (- sx px)) (abs (- sy py)) )
          1
          2)
      #f 
      )
  )

; P.S. правило пешечного квадрата, где первый ход совершает король
(define (z5 kx ky px py)
  (and (<= (- py 1) ky)
       (not (= py 8))
       (<= (- px (- 9 py)) kx (+ px (- 9 py))))      
)
 
